package com.liyueheng.app.dataWarehouseDetail.behavior

import com.liyueheng.util.{ConfigLoader, SparkConf}
import org.apache.spark.sql.functions.countDistinct

object UniqueVisitors {
  //记录每日等不同时间范围内的独立用户数
  def uniqueVisitors(): Unit = {
    println("------------------ 分析独立用户数 -----------------")
    // 1. 读取数据
    val databaseDwd = ConfigLoader.getString("databases.dwd") // 获取 dwd 数据库名
    val appName = ConfigLoader.getString("app.name") // 获取应用名称
    val databaseDws = ConfigLoader.getString("databases.dws") // 获取 dws 数据库名
    val spark = SparkConf.createSparkSession(appName)
    try{
    val tableDF = spark.table(s"$databaseDwd.user_act")
    // 2. 计算独立用户数
    val value = tableDF.groupBy("act_date")
      .agg(countDistinct("user").alias("value"))
      .orderBy("act_date")
    // 3. 保存结果
    value.write.mode("overwrite").format("hive").saveAsTable(s"$databaseDws.detail_uv")
    }finally {
      // 4. 清理资源
      SparkConf.stopSparkSession(spark)
    }
  }
}
